Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pomoc w dokończeniu skryptu.
Forum PHP.pl > Forum > Przedszkole
TydzienZphp
Witam
Moja przygoda z php zaczęła się parę dni temu.
Nie do końca wszystko ogarniam.
W sumie to wszystko zaczęło się od pomysłu, który zamierzam zrealizować.

A więc do rzeczy.
Chcę zintegrować Teamspeaka z grą League of Legends.
Skrypt ma za zadanie sprawdzać czy dany użytkownik rozgrywa mecz w grze
i jeśli tak stworzyć kanał na TS i przenieść tam użytkownika.
Skrypt jest tylko dla mnie i dla moich znajomych.
Nie jest to jakiś komercyjny produkt więc jeśli ktoś
chciałby skorzystać nie mam nic przeciwko.
Mam nadzieję, że nie pojawią się zaraz komentarze typu:
Zleć to komuś kto się na tym zna i zapłać mu odpowiednią sumę.

  1. $LoLsgname = "LOL";
  2. $lolmainCHid = "156";
  3. $region = "eune";
  4.  
  5. $botname = "Test-RIOT";
  6. $TSaddress = "127.0.0.1";
  7. $TSqueryport = "10011";
  8. $TSport = "9987";
  9. $TSadminNickname = "serveradmin";
  10. $TSpassword = "g87bRsLJ";
  11.  
  12. // ERROR REPORT
  13. ini_set('display_errors', 'On');
  14.  
  15.  
  16. require_once dirname(__file__) .
  17. "/../TS3LOL/ts3php/libraries/TeamSpeak3/TeamSpeak3.php";
  18. require_once dirname(__file__) . "/../TS3LOL/Unilib/Unirest.php";
  19. Unirest::verifyPeer(false);
  20.  
  21.  
  22. try
  23. {
  24. $ts3_VirtualServer = TeamSpeak3::factory("serverquery://$TSadminNickname:$TSpassword@$TSaddress:$TSqueryport/?server_port=$TSport&nickname=$botname");
  25.  
  26.  
  27. }
  28. catch (TeamSpeak3_Exception $e)
  29. {
  30. // print the error message returned by the server
  31. echo "Error " . $e->getCode() . ": " . $e->getMessage();
  32. }
  33.  
  34.  
  35. $arr_LOLClientList = $ts3_VirtualServer->serverGroupGetByName("$LoLsgname");
  36.  
  37. $TSuserdata = array();
  38.  
  39.  
  40. foreach ($arr_LOLClientList as $TSClid => $TSArray)
  41. {
  42. array_push($TSuserdata, array(
  43.  
  44. "TsNICK" => $TSArray->client_nickname->toString(),
  45. "TsDBID" => $TSArray->client_database_id,
  46. // "TsUID" => $TSArray->client_unique_identifier->toString(),
  47. // "TsSERVGIDs" => $TSArray->client_servergroups,
  48. //"TsCHANGIDs" => $TSArray->client_channel_group_id,
  49. "TsCLIENTID" => $TSArray->clid,
  50. "TsCLIENTCHANID" => $TSArray->cid));
  51.  
  52. }
  53.  
  54. if (empty($TSuserdata))
  55. {
  56. echo "No online users with $LoLsgname server group ";
  57.  
  58. die;
  59. }
  60.  
  61.  
  62. foreach ($TSuserdata as $Summoner)
  63. {
  64.  
  65.  
  66.  
  67. $response = Unirest::get("https://community-league-of-legends.p.mashape.com/api/v1.0/$region/summoner/retrieveInProgressSpectatorGameInfo/" .
  68. $Summoner['TsNICK'], array("X-Mashape-Authorization" =>
  69. "RU6K0QgxXz4btt0eB4gzAz6rCvlPpdFm"), null);
  70. $array = ($response->raw_body);
  71. $new = json_decode($array, true);
  72.  
  73.  
  74. if (isset($new["success"]) == "false")
  75. {
  76. echo "No Game for player " . $Summoner['TsNICK'] .
  77. " was found in the system <br />";
  78. $ts3_VirtualServer->message("No Game for player " . $Summoner['TsNICK'] .
  79. " was found in the system");
  80.  
  81.  
  82. } elseif (empty($new))
  83. {
  84. echo "API not responding";
  85. die;
  86. } elseif (!empty($new["game"]))
  87. {
  88. $ts3_VirtualServer->message("Looks like " . $Summoner['TsNICK'] .
  89. " are in game!!\nLOADING DATA....");
  90. echo "Looks like " . $Summoner['TsNICK'] . " are in game!!<br />";
  91.  
  92. $sumgameid = array();
  93. $teamOne = array();
  94. $teamTwo = array();
  95.  
  96. array_push($sumgameid, array("playerId" => $new["playerCredentials"]["playerId"],
  97. "gameId" => $new["playerCredentials"]["gameId"]));
  98.  
  99.  
  100. //TEAM ONE
  101. foreach ($new["game"]["teamOne"]["array"] as $teamOneArray)
  102. {
  103.  
  104. array_push($teamOne, array(
  105. "summonerInternalName" => $teamOneArray["summonerInternalName"],
  106. "accountID" => $teamOneArray["accountId"],
  107. "summonerID" => $teamOneArray["summonerId"]));
  108. }
  109. //Team TWO
  110. foreach ($new["game"]["teamTwo"]["array"] as $teamTwoArray)
  111. {
  112.  
  113. array_push($teamTwo, array(
  114.  
  115. "summonerInternalName" => $teamTwoArray["summonerInternalName"],
  116. "accountID" => $teamTwoArray["accountId"],
  117. "summonerID" => $teamTwoArray["summonerId"]));
  118.  
  119. }
  120.  
  121. foreach ($TSuserdata as $key => $tsu)
  122. {
  123. foreach ($teamOne as $tone)
  124. {
  125. if ($tone["summonerInternalName"] == strtolower($tsu["TsNICK"]))
  126. {
  127. foreach ($tone as $k => $c)
  128. {
  129. $TSuserdata[$key][$k] = $c;
  130. }
  131. $find = 1;
  132. break;
  133. }
  134. }
  135. }
  136. foreach ($TSuserdata as $key => $tsu)
  137. {
  138. foreach ($teamTwo as $ttwo)
  139. {
  140. if ($ttwo["summonerInternalName"] == strtolower($tsu["TsNICK"]))
  141. {
  142. foreach ($ttwo as $k => $c)
  143. {
  144. $TSuserdata[$key][$k] = $c;
  145. }
  146. $find = 1;
  147. break;
  148. }
  149. }
  150. }
  151.  
  152.  
  153. foreach ($TSuserdata as $key => $tsu)
  154. {
  155. foreach ($sumgameid as $sumid)
  156. {
  157. if (isset($tsu["accountID"]))
  158. {
  159. if ($sumid["playerId"] == ($tsu["accountID"]))
  160. {
  161. foreach ($sumid as $k => $c)
  162. {
  163. $TSuserdata[$key][$k] = $c;
  164. }
  165. $find = 1;
  166. break;
  167. }
  168. }
  169. }
  170. }
  171.  
  172.  
  173. $subchannelnamelist = "";
  174. $channel = $ts3_VirtualServer->channelGetById("$lolmainCHid")->subChannelList();
  175. foreach ($channel as $sub)
  176. {
  177. $subchannelname = $sub;
  178. $subchannelnamelist = $subchannelnamelist . $subchannelname . ",";
  179. }
  180. foreach ($TSuserdata as $tsUser)
  181. {
  182. if (!in_array(isset($tsUser["gameId"]), explode(',', $subchannelnamelist)))
  183. {
  184. $cid = $ts3_VirtualServer->channelCreate(array(
  185. "channel_name" => "" . $tsUser["gameId"] . "",
  186. "channel_topic" => "test",
  187. "channel_codec" => TeamSpeak3::CODEC_SPEEX_ULTRAWIDEBAND,
  188. "channel_codec_quality" => 0x08,
  189. "channel_flag_permanent" => true,
  190. "channel_password" => false,
  191. "cpid" => $lolmainCHid));
  192.  
  193. $Onecid = $ts3_VirtualServer->channelCreate(array(
  194. "channel_name" => "Team One",
  195. "channel_topic" => "Team One",
  196. "channel_codec" => TeamSpeak3::CODEC_SPEEX_ULTRAWIDEBAND,
  197. "channel_codec_quality" => 0x08,
  198. "channel_flag_permanent" => true,
  199. "channel_password" => false,
  200. "cpid" => $cid));
  201.  
  202. $Twocid = $ts3_VirtualServer->channelCreate(array(
  203. "channel_name" => "Team Two",
  204. "channel_topic" => "Team Two",
  205. "channel_codec" => TeamSpeak3::CODEC_SPEEX_ULTRAWIDEBAND,
  206. "channel_codec_quality" => 0x08,
  207. "channel_flag_permanent" => true,
  208. "channel_password" => false,
  209. "cpid" => $cid));
  210. }
  211. }
  212. // if (isset($tsUser["gameId"]))
  213. // {
  214. // $Onecid = $ts3_VirtualServer->channelGetByName("" . $tsUser["gameId"] . "")->
  215. // subChannelGetByName("Team One")->cid;
  216. // $Twocid = $ts3_VirtualServer->channelGetByName("" . $tsUser["gameId"] . "")->
  217. // subChannelGetByName("Team Two")->cid;
  218. // }
  219. // }
  220. // foreach ($teamOne as $tomove)
  221. // {
  222. // foreach ($TSuserdata as $tsmove)
  223. // {
  224. //
  225. //
  226. // if ($tsmove["summonerInternalName"] == $tomove["summonerInternalName"])
  227. // {
  228. // if ($Onecid != $tsmove["TsCLIENTCHANID"])
  229. // {
  230. // $ts3_VirtualServer->clientMove($tsmove["TsCLIENTID"], $Onecid);
  231. // $ts3_VirtualServer->clientGetByDbid($tsmove["TsDBID"])->message("You are moved to your team channel");
  232. // } else
  233. // {
  234. // echo " " . $tsmove["TsNICK"] . " Already on channel";
  235. // $ts3_VirtualServer->message("Already on channel ");
  236. // }
  237. // }
  238. // }
  239. // }
  240. //
  241. // foreach ($teamTwo as $tomove)
  242. // {
  243. // foreach ($TSuserdata as $tsmove)
  244. // {
  245. //
  246. // if ($tsmove["summonerInternalName"] == $tomove["summonerInternalName"])
  247. // {
  248. // if ($Twocid != $tsmove["TsCLIENTCHANID"])
  249. // {
  250. //
  251. // $ts3_VirtualServer->clientMove($tsmove["TsCLIENTID"], $Twocid);
  252. // $ts3_VirtualServer->clientGetByDbid($tsmove["TsDBID"])->message("You are moved to your team channel");
  253. // } else
  254. // {
  255. // echo " " . $tsmove["TsNICK"] . " Already on channel";
  256. // $ts3_VirtualServer->message("Already on channel ");
  257. // }
  258. // }
  259. // }
  260. // }
  261. }
  262. }




Przepraszam za post pod postem ale brakło miejsca.
Mój Problem polega na tym, że nie do końca wiem wiem jak zapętlić adres api by uzyskać "gameId" dla każdego użytkownika TS.
Po wrzuceniu adresu w pętlę bez dodawania [0] w tablicy (nie wiem jak to się fachowo nazywa) te dane jakoś dziwnym trafem znikają.
Jeśli zmienię $new na $new[] to nie wiem jak zapętlić $new["game"]["teamOne"]["array"]
Pomożecie mi jakoś doprowadzić to do finału. Stworzyłem tymczasowy serwer TS z "testowymi graczami" więc jak ktoś ma czas i ochote mi pomóc
to mogę podać IP.
Kshyhoo
Witamy na Forum. By uniknąć kasowania wątków, zapoznaj się z zasadami tu panującymi, szczególnie z pierwszą linijką mojej sygnatury.
TydzienZphp
Jak rozumiem temat wątku jest nieodpowiedni. Tylko problem w tym, że jestem tak tępy w tym temacie, że nie wiem nawet jak zadać pytanie smile.gif
KR2615
Nie jesteś tempy tylko po prostu porywasz się z motyką na słońce. To troszkę tak, jakbyś potrafił wymienić filtr powietrza w samochodzie a drugiego dnia wpadasz na pomysł "Zbuduję superauto konkurujące z Ferrari"

Co do PHP, zacznij od Hello worlda, przerób kilka prostych przykładów, stwórz swoją właśną stronkę a dopiero potem zabierz się za przerabianie skryptów mających po kilkaset linii.
TydzienZphp
Z dumą muszę przyznać, że nic nie przerabiam i całość jest mojego autorstwa.

Chodzi mi o to, że jak zrobię tak :

  1.  
  2.  
  3. foreach ($TSuserdata as $Summoner)
  4. {
  5.  
  6.  
  7. $response = Unirest::get("https://community-league-of-legends.p.mashape.com/api/v1.0/$region/summoner/retrieveInProgressSpectatorGameInfo/" .
  8. $Summoner['TsNICK'], array("X-Mashape-Authorization" =>
  9. "X4GNspL1YAXBsosde9ofgOsEqhtSaEid"), null);
  10. $array = ($response->raw_body);
  11. $new[] = json_decode($array, true);
  12.  
  13. }
  14.  
  15.  
  16. foreach ($new as $userGmID)
  17. {
  18. if (isset($userGmID['playerCredentials']))
  19. {
  20. $newArray[] = array('
  21. playerId' => $userGmID['playerCredentials']['playerId'],
  22. 'gameId' => $userGmID['playerCredentials']['gameId']
  23. );
  24. }
  25. }
  26.  


to otrzymam dane jakie chcę, ale nie wiem wtedy jak otrzymać dane dla każdego usera z
  1. foreach ($new["game"]["teamOne"]["array"] as $teamOneArray)
  2. {
  3.  
  4. array_push($teamOne, array(
  5. "summonerInternalName" => $teamOneArray["summonerInternalName"],
  6. "accountID" => $teamOneArray["accountId"],
  7. "summonerID" => $teamOneArray["summonerId"]));
  8. }


wiem , że dla jednego muszę dodać $new[0]["game"]["teamOne"]["array"]
ale nie wiem jak dla wszystkich
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.